<?php
class Arm_Module_Sql_Pdo_Mysql extends Arm_Db_Sql_Mysql
{
    /**
     * таблица модулей
     * @var string
     */
    const ADMIN_MODULE = 'admin_module';
    
   /**
    * Zend_Db_Select
    * 
    * @return Zend_Db_Select
    */
   public function getModule()
   {
     $select = $this->_getSelect();
     $select->from(self::ADMIN_MODULE);
     $select->order(array('system DESC', 'id'));
     return $select;
   }
   
   /**
    * Вернет имя модуля по его id
    * @param int $id
    */
   public function getModuleName($id)
   {
     $select = $this->_getSelect();
     $select->from(self::ADMIN_MODULE, 'name');
     $select->where('id=?', $id);
     return $this->getDb()->fetchOne($select);
   }
   
   public function delTablesModule($module)
   {
      $tables = $this->getDb()->listTables();
      foreach ($tables as $k=>$v) {
          if(strpos($v, $module) === 0) {
              $this->getDb()->query('DROP TABLE ' . $this->getDb()->quoteIdentifier($v));
          }
      }
      return;
   }
   
   /**
    * Удалит модуль с системной таблици, вернет его id который был 
    * в данной таблице.
    * @param string $name
    * @return int|false
    */
   public function delModule($name)
   {
     $idModule = $this->getIdModule($name);
     if($idModule === false) {
         return false;
     }
     $this->getDb()->delete(self::ADMIN_MODULE, 'id=' . $idModule);
     return $idModule;
   }
   
   /**
    * Включает или выключает модуль
    * @param unknown_type $name
    * @param unknown_type $mode
    */
   public function onOff($name, $mode)
   {
         $idModule = $this->getIdModule($name);
         $this->getDb()->update(self::ADMIN_MODULE, array('on'=>$mode), 'id=' . $idModule);
         return;
   }
   
   /**
    * Вернет id модуля
    * @param string $name
    * @return int|false
    */
   public function getIdModule($name)
   {
     $select = $this->_getSelect();
     $select->from(self::ADMIN_MODULE, 'id');
     $select->where('name=?', $name);
     return $this->getDb()->fetchOne($select);
   }
   
   /**
    * Добавит новый модуль в систему, и вернет его id
    * @param array $data
    */
   public function addModule($data)
   {
    $this->getDb()->insert(self::ADMIN_MODULE, $data);
    return $this->getIdModule($data['name']);
   }
}